package com.miya.demo.service;

import com.miya.demo.model.dto.wechat.TemplateMsgDTO;
import com.miya.demo.model.dto.wechat.WechatAuthDTO;
import com.miya.demo.model.dto.wechat.WechatAuthDecryptDTO;
import com.miya.demo.model.vo.wechat.WeChatAccessTokenVO;
import com.miya.demo.model.vo.wechat.WeChatAuthVO;
import com.miya.demo.model.vo.wechat.WeChatUserInfoVO;

import java.util.List;

/**
 * 微信服务
 *
 * @author CaiXiaowei
 * @date 2022/08/31
 */
public interface WechatService {

    /**
     * 微信小程序授权
     *
     * @param wechatAuthDTO 微信auth dto
     * @return {@link WeChatAuthVO}
     */
    WeChatAuthVO authMiniPro(WechatAuthDTO wechatAuthDTO);

    /**
     * 解密微信小程序授权手机号
     *
     * @param wechatAuthDecryptDTO 微信auth解密dto
     * @return {@link String}
     */
    String decryptMiniProPhoneNumber(WechatAuthDecryptDTO wechatAuthDecryptDTO);

    /**
     * 获取微信访问令牌
     *
     * @param appid  appid
     * @param secret 秘密
     * @return {@link WeChatAccessTokenVO}
     */
    WeChatAccessTokenVO getWechatAccessToken(String appid, String secret);

    /**
     * 获取公众号关注用户
     *
     * @param openid 第一个拉取的OPENID，不填默认从头开始拉取
     * @return {@link List}<{@link String}>
     */
    List<String> getWechatUser(String openid);

    /**
     * 获取公众号关注用户详情
     *
     * @param openid openid
     * @return {@link WeChatUserInfoVO}
     */
    WeChatUserInfoVO getWechatUserInfo(String openid);

    /**
     * 发送模板消息
     *
     * @param templateMsgDTO 模板消息dto
     * @return {@link Boolean}
     */
    Boolean sendTemplateMsg(TemplateMsgDTO templateMsgDTO);
}
